#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "wifi_smartconfig.h"
#include "nvs_flash.h"
#include "freertos/event_groups.h"
#include "driver/gpio.h"
#include "button.h"
#include "led.h"
#include "bsp_relay.h"

// 按键事件组
static EventGroupHandle_t s_pressEvent;
#define SHORT_EV BIT0 // 短按
#define LONG_EV BIT1  // 长按
#define BTN_GPIO 9

/** 短按按键回调函数
 * @param 无
 * @return 无
*/
void short_press_handle(void)
{
    xEventGroupSetBits(s_pressEvent,SHORT_EV);
}


/** 长按按键回调函数
 * @param 无
 * @return 无
 */
void long_press_handle(void)
{
    xEventGroupSetBits(s_pressEvent, LONG_EV);
}


void Relay_Test_start(void)
{

}
void app_main(void)
{
    nvs_flash_init();  // 初始化NVS
    initialise_wifi(); // 初始化wifi
    led_breath_init();
    Relay_GPIO_Init();

    s_pressEvent = xEventGroupCreate();
    button_config_t btn_cfg =
        {
            .gpio_num = BTN_GPIO,        // gpio号
            .active_level = 0,           // 按下的电平
            .long_press_time = 3000,     // 长按时间
            .short_cb = short_press_handle,            // 短按回调函数
            .long_cb = smartconfig_start // 长按回调函数
        };
    button_event_set(&btn_cfg); // 添加按键响应事件处理
    EventBits_t ev;

    while (1)
    {
        ev = xEventGroupWaitBits(s_pressEvent, SHORT_EV | LONG_EV, pdTRUE, pdFALSE, portMAX_DELAY);
        if (ev & SHORT_EV)
        {
            // 短按事件，亮一下熄灭
                Set_Relay_Switch(1);//控制继电器吸合
                vTaskDelay(1000 / portTICK_PERIOD_MS);
                printf("\r\n继电器吸合!\r\n");

                Set_Relay_Switch(0);//控制继电器断开
                vTaskDelay(1000 / portTICK_PERIOD_MS);
                printf("\r\n继电器断开!\r\n");

        }
        if (ev & LONG_EV)
        {
            smartconfig_start(); // 检测到长按事件，启动smartconfig
        }
        xEventGroupClearBits(s_pressEvent,SHORT_EV);
        xEventGroupClearBits(s_pressEvent,LONG_EV);
    }
}
